Skip to content

Adding ES|QL command URI_PARTS#140004

Merged
eyalkoren merged 100 commits intoelastic:mainfrom
eyalkoren:esql-uri_parts-command
Feb 18, 2026
Merged

Adding ES|QL command URI_PARTS#140004
eyalkoren merged 100 commits intoelastic:mainfrom
eyalkoren:esql-uri_parts-command

Conversation

@eyalkoren
Copy link
Copy Markdown
Contributor

@eyalkoren eyalkoren commented Dec 26, 2025

Closes #134885

This PR adds the new URI_PARTS command on top of an infrastructure for new type of commands that execute a single evaluation given a single input and produce a compound result. Since real compound column type is not supported (yet?), the evaluation results with multiple fields containing the same prefix. Hopefully, if and when we add support to compound (i.e. object-like) column type, it should be easy to change the type returned by such commands without making it a breaking change.

Key characteristics

  • Syntax: URI_PARTS <uri-parts> = <uri>
  • Computation is executed row-by-row
  • As opposed to multi-EVAL, logical and physical plan nodes cannot be split, they always add the same attributes at the same order to the output schema
  • The coordinating node determines the output fields and executing nodes populate exactly the predefined output columns. This ensures consistency in (presumably rare) cases where the cluster contains multiple node versions where local evaluation may produce different output.
  • Allows pushing filters, limits and samples through it
  • Can be pushed down through project and order-by nodes
  • Allows constant/null replacement optimization

To-do list

  • Integration testing through CSV tests
  • Unit testing of parsing, analysis and optimizations
  • Unit testing mismatch between predefined output fields and actual local evaluation output
  • Implement, test and document that multi-value fields are not supported
  • Use functionality from a new uri-parts library that is shared with the corresponding ingest processor
  • Documentation
  • Add generative tests

@github-actions
Copy link
Copy Markdown
Contributor

ℹ️ Important: Docs version tagging

👋 Thanks for updating the docs! Just a friendly reminder that our docs are now cumulative. This means all 9.x versions are documented on the same page and published off of the main branch, instead of creating separate pages for each minor version.

We use applies_to tags to mark version-specific features and changes.

Expand for a quick overview

When to use applies_to tags:

✅ At the page level to indicate which products/deployments the content applies to (mandatory)
✅ When features change state (e.g. preview, ga) in a specific version
✅ When availability differs across deployments and environments

What NOT to do:

❌ Don't remove or replace information that applies to an older version
❌ Don't add new information that applies to a specific version without an applies_to tag
❌ Don't forget that applies_to tags can be used at the page, section, and inline level

🤔 Need help?

Copy link
Copy Markdown
Contributor

@ivancea ivancea left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

LGTM! The only missing thing, the strict column validation in the test generator. The output should be the one we expect

@eyalkoren
Copy link
Copy Markdown
Contributor Author

The only missing thing, the strict column validation in the test generator. The output should be the one we expect

I assume you mean doing what I did in my initial commit, is that correct? What do you propose? If there's an issue, do you think it may be related to my command?

The problem is that neither Grok nor Dissect test this. On the contrary, their validation seems as if they expect that there are situations where their execution is not going to add output columns - they only assert that they do not remove columns 🤔

@eyalkoren eyalkoren requested a review from ivancea February 18, 2026 06:44
Copy link
Copy Markdown
Contributor

@ivancea ivancea left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

LGTM, thanks for the TS and generative tests!

@eyalkoren eyalkoren merged commit ade2ecd into elastic:main Feb 18, 2026
35 checks passed
@tylerperk tylerperk changed the title Adding ES|QL command URI_PART Adding ES|QL command URI_PARTS Mar 20, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

:Analytics/Compute Engine Analytics in ES|QL >feature :StorageEngine/ES|QL Timeseries / metrics / PromQL / logsdb capabilities in ES|QL Team:Analytics Meta label for analytical engine team (ESQL/Aggs/Geo) Team:StorageEngine v9.4.0

Projects

None yet

Development

Successfully merging this pull request may close these issues.

ESQL: Support uri_parts command

6 participants